#ifndef OBSERVER_H_
#define OBSERVER_H_

#include "Token.h"

class TokenObserver {
public:
	virtual void updateToken(Token t) = 0;
};

class CharacterObserver {
public:
	virtual void updateCharacter(char c) = 0;
};

class ErrorObserver {
public:
	virtual void updateError(std::string errorMessage) = 0;
};

class ScannerInterface {
public:
	virtual Token getToken() = 0;
	virtual std::string getFilename() = 0;
	
	virtual void registerObserver(CharacterObserver* o) = 0;
	virtual void registerObserver(TokenObserver* o) = 0;
	
	virtual void removeObserver(CharacterObserver* o) =0;
	virtual void removeObserver(TokenObserver* o) =0;
};

class ParserInterface {
public:
	virtual void registerObserver(ErrorObserver* o) = 0;
	virtual void removeObserver(ErrorObserver* o) =0;
};

#endif /*OBSERVER_H_*/
